package com.sc.nft.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.dto.DaoPledgeDigitDTO;
import com.sc.nft.entity.req.DaoPledgeCreateRequest;
import com.sc.nft.entity.req.DaoPledgeUpdateRequest;
import com.sc.nft.entity.vo.*;

import java.util.List;

/**
 * dao质押活动表服务
 */
public interface DaoPledgeService {

    /**
     * 活动详情
     * @param id 活动id
     * @param userId 用户id
     * @return DaoPledgeDetailVO
     */
    DaoPledgeDetailVO detailPledge(Long id, Long userId);

    /**
     * 质押活动记录
     * @param daoId daoId
     * @param pageNo pageNo
     * @param pageSize pageSize
     * @return DaoPledgePageVO
     */
    IPage<DaoPledgePageVO> pagePledge(Long daoId, Integer pageNo, Integer pageSize);

    /**
     * 质押参与记录
     * @param daoId daoId
     * @param pageNo pageNo
     * @param pageSize pageSize
     * @param userId userId
     * @return DaoPledgeRecordVO
     */
    IPage<DaoPledgeRecordVO> pagePledgeRecord(Long daoId, Integer pageNo, Integer pageSize, Long userId);

    /**
     * 参与记录详情
     * @param userId userId
     * @param id 参与记录id
     * @return DaoPledgeRecordDetailVO
     */
    DaoPledgeRecordDetailVO detailPledgeRecord(Long userId, Long id);

    /**
     * 结算
     */
    void settlePledge();

    /**
     * 质押
     * @param userId 用户id
     * @param daoId daoId
     * @param pledgeId 质押id
     * @param periodsId 期数id
     * @param collections 质押藏品
     */
    void pledge(Long userId, Long daoId, Long pledgeId, Long periodsId, List<DaoPledgeDigitDTO> collections);

    /**
     * 校验是否可以质押
     * @param userId 用户id
     * @param daoId daoId
     * @param pledgeId 质押id
     * @param periodsId 期数id
     * @param collections 质押藏品
     * @return boolean
     */
    Boolean isPledgeConditions(Long userId, Long daoId, Long pledgeId, Long periodsId, List<DaoPledgeDigitDTO> collections);

    /**
     * 新建销毁质押活动
     */
    void create(DaoPledgeCreateRequest request);

    /**
     * 修改销毁质押活动
     *
     * @param request
     */
    void update(DaoPledgeUpdateRequest request);

    /**
     * 更新上下架状态
     *
     * @param id
     * @param status
     */
    void updateStatus(Long id, Boolean status);

    /**
     * 分页查询
     *
     * @param page
     * @param daoId
     * @param name
     * @return
     */
    IPage<DaoPledgeCommercialVO> page(Page page, Long daoId, String name);

    /**
     * 详情
     *
     * @param id
     * @return
     */
    DaoPledgeDetailCommercialVO detail(Long id);

    /**
     * @param page
     * @param daoId
     * @param name
     * @return
     */
    IPage<DaoPledgeUserPeriodsVO> userPeriodsPage(Page page, Long daoId, String userTel, String name, Integer periods);

    /**
     * 共创记录详情
     *
     * @param id
     * @return
     */
    List<DaoPledgeUserPeriodsDetailVO> userPeriodsDetail(Long id);

    /**
     * 奖励记录分页查询
     *
     * @param page
     * @param daoId
     * @param userTel
     * @param name
     * @param periods
     * @return
     */
    IPage<DaoPledgeRewardPeriodsVO> rewardPeriodsPage(Page page, Long daoId, String userTel, String name, Integer periods);

    /**
     * 奖励记录详情
     *
     * @param id
     * @return
     */
    List<DaoPledgeRewardPeriodsDetailVO> rewardPeriodsDetail(Long id);

    /**
     * 直推结算记录分页查询
     *
     * @param page
     * @param daoId
     * @param targetUserTel
     * @param sourceUserTel
     * @return
     */
    IPage<DaoPledgeDirectPushVO> directPushPage(Page page, Long daoId, String targetUserTel, String sourceUserTel);

}
